<template>
</template>

<script>
	//箭头函数(会创建自己的局部作用域，但是this不绑定)
		//箭头函数完整写法
		(a,b)=>{return a+b;}
		//若参数只有一个，可以去掉括号
		a=>{return a+b}
		//若大括号中的语句只有一个，可以去掉大括号和return
		a=>a+b//需要一个值接收返回的a+b的值
		//箭头函数中的this，是离他最近的层次的非箭头函数的this
		//支持async、无arguments对象（可以用...运算符来代替，也就是rest参数），不支持yield
		//若需要返回的是对象，那么必须要小括号包裹
		a=>({name:"lihua"})//a=>{name:"lihua"}就是错误的，有歧义
	//Iterator for...of循环
		// 迭代器就是用来顺序访问集合的一个对象。创建一个简单的迭代器（生成 1, 2, 3）
			const myIterator = {
			  current: 1,
			  end: 3,
			  next() {
				if (this.current <= this.end) {
				  return { value: this.current++, done: false };
				} else {
				  return { value: undefined, done: true };
				}
			  }
			};
			console.log(myIterator.next()); // { value: 1, done: false }
			console.log(myIterator.next()); // { value: 2, done: false }
			console.log(myIterator.next()); // { value: 3, done: false }
			console.log(myIterator.next()); // { value: undefined, done: true }
			//可迭代的对象有Array String Map Set arguments对象 NodeList（DOM 元素集合），也就是可以for of的
		//for of，循环出来的是可迭代对象中的value，必须是可迭代器对象
			//可迭代对象需要实现Symbol.iterator方法，for of会去一遍又一遍执行该方法，输出返回中对象的value
				// 创建一个表示数字范围的可迭代对象
				const range = {
				  start: 1,
				  end: 5,
				  [Symbol.iterator]() { // 实现 Symbol.iterator 方法
					let current = this.start;
					return {
					  next: () => {
						if (current <= this.end) {
						  return { value: current++, done: false };
						} else {
						  return { value: undefined, done: true };
						}
					  }
					};
				  }
				};  
				for (const num of range) {
				  console.log(num); // 1, 2, 3, 4, 5
				}
		
</script>

<style>
</style>